<?php

namespace App\Services;

use Illuminate\Http\Request;
use Image;

class ImageService
{
    static public function getimage(Request $request)
    {
        // dump($request->name);
        // dump($request->thumb);

        // dump($width);
        // dump($height);
        // dump($path);
        $img = Image::cache(function ($image) use ($request) {
            $image->make(self::getPath($request->name));
        }, 30, true);
        // $img = self::chulimage($request);
        // dump($img->filesize());
        // $img = Image::make($path);
        // $img->resize($width,$height);

        // $img->blur(80);
        // $img->resizeCanvas($width, $height,'center');
        // $yuanwidth = $img->width();
        // $yuanheight = $img->height();

        // $cimg = Image::canvas($width, $height, '#cccccc');

        // fill image with color
        // $cimg->fill('#b53717',50,60);

        // backup image with colored background
        // $cimg->backup();

        // fill image with tiled image
        // $cimg->fill($path,20,10);
        // dump($yuanwidth);
        // dump($yuanheight);
        // dump(urlencode($file));
        
        // $image = Image::make($path);
        
        // dump($image->getManager());
        $yuanwidth = $img->width();
        $yuanheight = $img->height();
        // $bgcolor = config('image.canvas-bgcolor');
        // dump($request->name);
        // dump($request->thumb);
        // dump($request->quality);
        // dump($request->bgcolor);
               
        if($request->thumb){
            $bgcolor = '#'.($request->bgcolor ? $request->bgcolor : config('image.canvas-bgcolor'));
            [$width, $height] = self::getThumb($request->thumb);
            if ($yuanheight > $height || $yuanwidth > $width) {
                $width > $height ? $img->heighten($height) : $img->widen($width);
            }
            $img->resizeCanvas($width, $height, 'center',false,$bgcolor);        
        }
        
        $quality = $request->quality ? $request->quality : config('image.quality'); 
        
        return $img->response('jpg', $quality);
        // return realpath($file);
        // $str = Image::make(realpath($file))->response('jpg', 75);
        // return $str;
    }

    static public function imageratio(Request $request){
        // $file = '/storage/uploads/2020-10-26/timg.jpeg';
        // $path = self::getPath($file);
        // $img = Image::make($path);
        // dump($request->route('width',0));
        // dump($request->route('height',0));
        $img = Image::cache(function ($image) use ($request) {
            $image->make(self::getPath($request->name));
        }, 30, true);
        $setw = $request->route('width',0);
        $seth =  $request->route('height',0);
        // dump($setw);
        // dump($seth);
        $img = self::setwidthheight($img,$setw,$seth);
        $width = $img->width();  
        $height = $img->height();
        $quality = $request->quality ? $request->quality : config('image.quality'); 
        
        return $img->response('jpg', $quality);
        // dump($width);
        // dump($height);
    }

    static private function setwidthheight($img,$setw,$seth){
        $width = $img->width();  
        // dump('width');
        // dump($width);      
        if($width > $setw && $setw != 0){
            $img->widen($setw);
        }
        // dump('height');
        
        $height = $img->height();
        // dump($height);   
        if($height > $seth && $seth != 0){
            $img->heighten($seth);
        }
        return $img;
    }

    // static protected function chulimage($image,$request)
    // {

    //     // $file = '/storage/uploads/2020-10-26/timg.jpeg';
    //     $file = $request->name;
    //     $path = self::getPath($file);
    //     $image = $image->make($path);
    //     // [$width, $height] = self::getThumb($request->thumb);
    //     // // $image = Image::make($path);
        
    //     // // dump($image->getManager());
        
    //     // $image->resizeCanvas($width, $height, 'center',false);
    //     return;
    //     $yuanwidth = $image->width();
    //     $yuanheight = $image->height();
    //     $bgcolor = config('image.canvas-bgcolor');
        
    //     if ($yuanheight > $height || $yuanwidth > $width) {
    //         // $image->heighten($height);
    //         $image->widen($width);
    //         // return $image->heighten($height);
            
    //     } 
    //     $image->resizeCanvas($width, $height, 'center',false,$bgcolor);
    // }



    static protected function getPath($name)
    {
        return $name[0] == '/' ? realpath(substr($name, 1)) : realpath($name);
    }

    static protected function getThumb($thumb)
    {
        if (!$thumb) {
            return [];
        }

        return explode('x', $thumb);
    }

    private function test()
    {
        //说明
        // $image->flip('h'); //水平翻转
        // $image->flip('v'); //垂直翻转
        // $image->colorize(0, 30, 0);//红绿蓝上色
        // $img->contrast(65); //对比度
        // $img->crop(100, 100, 25, 25);//剪裁 宽高xy四个参数
        // $img->blur(12); //图片的模糊度，GD下大量使用影响性能，默认1
        // $img->brightness(30); //图片亮度，-100-100，默认0
        // $img = Image::canvas(32, 32, '#ff0000'); //画图创建画板，可添加背景色
        // $img = Image::canvas(300, 200, '#ddd');
        // $img->circle(100, 50, 50, function ($draw) { //在图片里面画圆，直径，x坐标，y坐标
        //     $draw->background('#0000ff'); //背景色
        //     $draw->border(1, '#f00'); //圆边框，与背景色
        //     $img->colorize(-100, 0, 100); //R,G,B调色，【-100,100】
        //     $img->contrast(65); //对比度【-100,100】
        // });
        // $img->crop(100, 100, 25, 25); //图片的裁剪，默认左上角开始裁剪，宽，高，可选x,y坐标
        // $img->destroy(); //删除图片
        // $img->save('/222.jpg'); //保存图片
        // $img->ellipse(20, 30, 20, 30, function ($draw) { //定义椭圆跟圆一致
        //     $draw->background('#0000ff');
        //     $draw->border(1, '#ff0000');
        // });
        // $img->encode('jpg', 75); //编码，只有jpg才能选择质量，0-100
        // $img->fill('#ff00ff', 0, 0); //填充图片或颜色，可带坐标，带坐标以该坐标点颜色进行选择填充
        // $img->flip('h'); //图片翻转，v上下，h左右
        // $img->fit(200, 300); //修改图片长宽，按比例，自动裁剪，一个参数正方形
        // $img->fit(800, 600, function ($constraint) { //按照比例多原始图片最大修剪
        //     $constraint->upsize();
        // });
        // $img->gamma(5); //色彩gamma矫正》0
        // $imagick = $img->getCore(); //返回 gd resource 资源size：宽X高，trueColor
        // dd($imagick);
        // $img->greyscale(); //将图片变灰
        // return  $img->height(); //图片高度
        // $img->heighten(50);
        // $img->heighten(50, function ($constraint) {
        //     $constraint->upsize();
        // }); //以高为基准生成比例图片
        // $tt = Image::canvas(130, 100, '#F60');
        // $img->insert('public/watermark.png', 'bottom-right', 10, 10); //插入图片，可选位置模式，默认：top-left ，top，top-right，left，center，right，bottom-left，bottom，bottom-right，可选x,y坐标
        // $img->interlace(true); //编码相关，true，false
        // $img->invert(); //反转图片颜色
        // $tt =  $img->iptc();
        // $img->limitColors(30); //色彩限制，出现磨砂效果
        // $img->line(10, 10, 195, 195, function ($draw) { //不支持GD，画线
        //     $draw->color('#f00');
        //     $draw->width(5);
        // });
        // $img->mask($tt, true);
        // dd($tt);
        // return $img->mime(); //图片格式 image/jpeg
        // $img->opacity(90); //透明度0-100，消耗性能
        // return $img->orientate();
        // return $img->pickColor(50, 50, 'hex'); //获取坐标颜色，array，rgb，rgba，hex，int
        // $img->pixel('#0000ff', 32, 32); //指定坐标填充色彩

        // $img->pixelate(2); //像素画马赛克
        // $points = array(
        //     40,  50,  // Point 1 (x, y)
        //     20,  110, // Point 2 (x, y)
        //     60,  60,  // Point 3 (x, y)
        //     120, 20,  // Point 4 (x, y)
        //     50,  40,  // Point 5 (x, y)
        //     10,  10   // Point 6 (x, y)
        // );
        // $img->polygon($points, function ($draw) {
        //     $draw->background('#0000ff');
        //     $draw->border(1, '#ff0000');
        // }); //坐标画图，背景和边框
        // $img->rectangle(5, 5, 50, 50, function ($draw) { //画矩形，可选背景色（颜色类型可选rgba，和普通）
        //     $draw->background('rgba(255, 255, 255, 0.5)');
        //     $draw->border(2, '#000');
        // });
        // $img->backup(); //备份图片状态
        // $img->reset(); //图片恢复到备份状态
        // $img->resize(null, 200, function ($constraint) {
        //     $constraint->aspectRatio();
        //     $constraint->upsize();
        // }); //设置图片的大小，回调可选，可单设置宽，高
        // $img->resizeCanvas(1280, 720, 'center', false, 'ff00ff'); //图片添加背景画板，可选位置模式，相对添加，背景色
        // $img->rotate(-45); //转动图片
        // $img->sharpen(15); //锐化，0-100
        // $img->stream('jpg', 60); //流编码
        // $img->text('foo', 50, 50, function ($font) {
        //     $font->file('foo/bar.ttf');
        //     $font->size(72);
        //     $font->color('#fdf6e3');
        //     $font->align('center');
        //     $font->valign('top');
        //     $font->angle(30);
        // });
        // $img->text('The quick brown fox jumps over the lazy dog.', 50, 50);
        // $img->text('foo', 0, 0, function ($font) {
        //     $font->color(array(255, 255, 255, 0.5));
        // }); //文字书写
        // $img->widen(300, function ($constraint) {
        //     $constraint->upsize();
        // }); //按照宽等比，可回调
        // return $img->width(); //获取图片宽
        // return $img->response('png'); //修改图片格式
    }
}
